#ifndef HEAD_H
#define HEAD_H

#include <my_header.h>


// 用于填充TLV协议的T部分
enum{
    CD, 
    LS, 
    PUTS,
    GETS,
    PWD,
    MKDIR,
    RMDIR,
    REMOVE,
    FILE_LEN,
    SEND_FILE,
    CANCEL,
    IS_OK,
    IS_NOT_OK,
    LOGIN_NAME,// 用户名
    LOGIN_PASSWORD,// 用户密码
};

// 传输格式
typedef struct train_s{
    int type;
    bool args[4];
    int len;
    char path[1024];
}train_t;

// 指令集
static const int instructCount = 8;
static const char instructSet[][10] = {"cd", "pwd", "ls", "mkdir", "rmdir", "puts", "gets", "remove"};


// 功能：建立连接
int establishConnect(char *ip, char *port);

// 功能：发送请求,包含指令和指令所需的地址信息
int TLVRequest(int sockfd, char *buf, int type);

// 功能：接收来自服务端的响应
int recvResponse(int sockfd);

// 功能：身份验证
int idVerify(int sockfd);

// 功能：上传文件
int putsFile(char *clientPath, char *serverPath, int sockfd);

// 功能：下载文件
int getsFile(char *serverPath, char *clientPath, int sockfd);

// 功能：处理客户端的键盘输入
int dealInstruction(char *instruct, int sockfd);

// 功能：发送请求，包含指令的参数和指令，以及指令的所需的地址信息
int TLVRequestSign(int sockfd, char *buf, int type, bool *args);

// 功能：发送文件长度
int TLVRequestLen(int sockfd ,int len);

#endif
